//
// Created by gogoqiu on 2021/10/18.
//

#ifndef RAPIDSVN_CMAKE_MYTRAY_H
#define RAPIDSVN_CMAKE_MYTRAY_H
#include <wx/wx.h>
#include <wx/taskbar.h>

/**
 * example
 * https://huangkx.blog.csdn.net/article/details/36184491?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control
 * MyFrame::MyFrame(const wxString &title) : wxFrame(NULL, wxID_ANY, title)
{
    ....
    m_Tray = new MyTray();
    m_Tray->SetIcon(wxIcon(cut_xpm), _("Hello Tray!"));
}

MyFrame::~MyFrame()
{
    if ( m_Tray )
        delete m_Tray;
}

 使用 wxTaskBarIcon 的退出流程
  1. 在 wxTaskBarIcon 上点'退出'，调用 m_pMainFrame->Close()
  2. MainFrame 收到消息，最后调用自己的 wxFrame::Destroy()
  3. 进入析构函数，delete m_pTray，通过 wxTaskBarIcon::~wxTaskBarIcon() 完成退出流程

  http://docs.wxwidgets.org/stable/wx_windowdeletionoverview.html

窗体的退出
我们点 [X]按钮，窗体收到 EVT_CLOSE 消息，如果没有“取消退出”，则 wxWindow::Destroy() 被调用，窗体被干掉。
wxFrame 默认会调用 wxWindow::Destroy() 。
wxDialog 默认只是隐藏 dialog，并不会 Destroy()。（要 Destroy()，要自己处理 EVT_CLOSE 消息）

app的退出
wxApp 有个属性，wxAppBase::m_exitOnFrameDelete，默认情况是所有 TopLevelWindow 都 Destroy，则自动退出 app。
 */
class MyTray : public wxTaskBarIcon
{
public:
    explicit MyTray( wxFrame *frame );
    void OnAbout(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnClickMyTray( wxTaskBarIconEvent& event );
protected:
    wxFrame *frame;
    wxMenu *CreatePopupMenu() override;

private:
DECLARE_EVENT_TABLE();
};

#endif //RAPIDSVN_CMAKE_MYTRAY_H
